有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将文本从对象的ArrayList设置为TextView?

我试图使用setText方法来显示从ObjectsArrayListTextView的所有元素

我在6个不同的工具架(A、B、C、D、E、F)中有6个按钮,每个按钮都有一个弹出菜单,用户在其中选择一个基点(N、S、E、W),然后在文本视图中显示工具架字母和单击的项目。这是地图:

以下是我使用的代码:

Button buttonA, buttonB, buttonC, buttonD, buttonE, buttonF;
private TextView coordenada_view;
ArrayList<PickUpPoint> pickuppoint_array = new ArrayList<PickUpPoint>();

    @Override
    protected void onCreate{......

buttonA.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    final PopupMenu popupMenu = new PopupMenu(Mapa.this, buttonA);
        popupMenu.getMenuInflater().inflate(R.menu.popup_menu, popupMenu.getMenu());
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
          @Override
          public boolean onMenuItemClick(MenuItem item) {
          String mShelving = buttonA.getText().toString();
           String mCardinalPoint = item.getTitle().toString();

                 pickuppoint_array.add(new PickUpPoint(mShelving,mCardinalPoint));
                 PickUpPoint pickUpPoint = new PickUpPoint(mShelving,mCardinalPoint);

//Here I´m trying to show all the elements of the ArrayList into the TextView
                    for (int i = 0; i < pickuppoint_array.size(); i++){
                      coordenada_view.setText( pickuppoint_array.get(i).toString());
                       }
                        return true;
                    }
                });
                popupMenu.show();

buttonB.setOnClickListener....
buttonC.setOnClickListener....
}

这是类PickUpPoint

class PickUpPoint {
    public String shelving;
    public String cardinalPoint;

    public String getShelving() {
        return shelving;
    }

    public String getCardinalPoint() {
        return cardinalPoint;
    }

    PickUpPoint(String shelving, String cardinalPoint) {
        this.shelving = shelving;
        this.cardinalPoint = cardinalPoint;
    }
}

但我是从数组列表中得到的:

所以,我的问题是。。。如何像这样从数组列表中获取所有元素


共 (2) 个答案

  1. # 1 楼答案

    使用此方法设置来自Arraylist的文本

    还要检查Arraylist是否不是null且为空

    public void setTextViewFromList(ArrayList<PickUpPoint> arraylist, TextView textview) {
        //Variable to hold all the values
        String output = "";
    
        for (int i = 0; i < arraylist.size(); i++) {
            //Append all the values to a string
            output += arraylist.get(i).getShelving();//whatever you want to show here like shelving or cordinalpoint use getCordinalPoint()
            output += "\n";
        }
    
        //Set the textview to the output string
       textview.setText(output);
    }
    

    用法

    这样称呼这个方法

    setTextViewFromList(pickuppoint_array,coordenada_view)
    
  2. # 2 楼答案

    我假设coordenada_view#setText只能被调用一次

    因此,首先需要将pickuppoint_数组中的元素转换为字符串 然后将其提供给setText方法

    StringBuilder content = new StringBuilder();
    for (int i = 0; i < pickuppoint_array.size(); i++) {
      content.append(pickuppoint_array.get(i).toString());
      content.append('\n');
    }
    
    coordenada_view.setText(content.toString());
    

    您还希望在PickUpPoint类中实现toString()方法,以返回每个对象所需的表示形式,例如:

    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("SHELVING ");
        builder.append(shelving);
        builder.append(" - ");
        builder.append(cardinalPoint);
        return builder.toString();
    }
    

    附言: 如果您知道这些字符串的预期长度,那么应该将其作为参数提供给StringBuilder构造函数,这样jvm就不需要浪费时间来调整其大小

    新的StringBuilder(18)可能适用于toString方法, 新的StringBuilder(19*pickuppoint_array.size())可能适用于另一个